how a c program is compiled